package models

type RegionResponse struct {
	Region      string `json:"region,omitnil" name:"region"`
	RegionName  string `json:"regionName,omitnil" name:"regionName"`
	RegionState string `json:"regionState,omitnil" name:"regionState"`
}

type ZoneResponse struct {
	Zone      string `json:"zone,omitnil" name:"zone"`
	ZoneName  string `json:"zoneName,omitnil" name:"zoneName"`
	ZoneId    string `json:"zoneId,omitnil" name:"zoneId"`
	ZoneState string `json:"zoneState,omitnil" name:"zoneState"`
}

type CvmRequest struct {
	VpcId              string     `json:"vpcId"`
	SubnetId           string     `json:"subnetId"`
	InstanceCount      int64      `json:"instanceCount"` // 实例数
	InstanceName       string     `json:"instanceName"`  // 实例名称
	HostName           string     `json:"hostName"`      //主机名称
	Password           string     `json:"password"`
	SecurityGroupIds   []string   `json:"securityGroupIds"`   // 安全组
	InstanceType       string     `json:"instanceType"`       //主机实例类型
	ImageId            string     `json:"imageId"`            // 镜像id
	InstanceChargeType string     `json:"instanceChargeType"` // 付费模式，PREPAID：预付费，即包年包月 POSTPAID_BY_HOUR：按小时后付费 默认值：POSTPAID_BY_HOUR。
	Period             int64      `json:"period"`             // 预付费时长
	RenewFlag          string     `json:"renewFlag"`          //自动续费标识。取值范围：	NOTIFY_AND_AUTO_RENEW：通知过期且自动续费	NOTIFY_AND_MANUAL_RENEW：通知过期不自动续费 	DISABLE_NOTIFY_AND_MANUAL_RENEW：不通知过期不  默认取值：NOTIFY_AND_MANUAL_RENEW
	Zone               string     `json:"zone"`               //区域
	SystemDisk         SystemDisk `json:"systemDisk"`         // 系统盘
	DataDisk           []DataDisk `json:"dataDisk"`           // 数据盘

}

type CvmResponse struct {
	InstanceId   string `json:"instanceId,omitnil" name:"instanceId"`
	InstanceType string `json:"instanceType,omitnil" name:"instanceType"`
	CPU          int64  `json:"CPU,omitnil" name:"CPU"`
	Memory       int64  `json:"memory,omitnil" name:"memory"` // 实例内存容量，单位：`GB`。
	// 实例业务状态。取值范围：<br><li>NORMAL：表示正常状态的实例<br><li>EXPIRED：表示过期的实例<br><li>PROTECTIVELY_ISOLATED：表示被安全隔离的实例。
	RestrictState string `json:"restrictState,omitnil" name:"restrictState"`
	// 实例名称。
	InstanceName string `json:"instanceName,omitnil" name:"instanceName"`
	// 实例计费模式。取值范围：<br><li>`PREPAID`：表示预付费，即包年包月<br><li>`POSTPAID_BY_HOUR`：表示后付费，即按量计费<br><li>`CDHPAID`：`专用宿主机`付费，即只对`专用宿主机`计费，不对`专用宿主机`上的实例计费。<br><li>`SPOTPAID`：表示竞价实例付费。
	InstanceChargeType string `json:"instanceChargeType,omitnil" name:"instanceChargeType"`
	// 实例系统盘信息。
	SystemDisk SystemDisk `json:"SystemDisk,omitnil" name:"SystemDisk"`
	// 实例数据盘信息。
	DataDisks          []DataDisk `json:"DataDisks,omitnil" name:"DataDisks"`
	PrivateIpAddresses []string   `json:"PrivateIpAddresses,omitnil" name:"PrivateIpAddresses"` // 实例主网卡的内网`IP`列表。
	PublicIpAddresses  []string   `json:"PublicIpAddresses,omitnil" name:"PublicIpAddresses"`
	// 实例带宽信息。
	InternetAccessible InternetAccessible `json:"InternetAccessible,omitnil" name:"InternetAccessible"`
	// 实例所属虚拟私有网络信息。
	VirtualPrivateCloud VirtualPrivateCloud `json:"VirtualPrivateCloud,omitnil" name:"VirtualPrivateCloud"`
	// 生产实例所使用的镜像`ID`。
	ImageId string `json:"ImageId,omitnil" name:"ImageId"`
	// 自动续费标识。取值范围：<br><li>`NOTIFY_AND_MANUAL_RENEW`：表示通知即将过期，但不自动续费<br><li>`NOTIFY_AND_AUTO_RENEW`：表示通知即将过期，而且自动续费<br><li>`DISABLE_NOTIFY_AND_MANUAL_RENEW`：表示不通知即将过期，也不自动续费。
	// <br><li>注意：后付费模式本项为null
	RenewFlag string `json:"RenewFlag,omitnil" name:"RenewFlag"`
	// 创建时间。按照`ISO8601`标准表示，并且使用`UTC`时间。格式为：`YYYY-MM-DDThh:mm:ssZ`。
	CreatedTime string `json:"CreatedTime,omitnil" name:"CreatedTime"`
	// 到期时间。按照`ISO8601`标准表示，并且使用`UTC`时间。格式为：`YYYY-MM-DDThh:mm:ssZ`。注意：后付费模式本项为null
	ExpiredTime string `json:"ExpiredTime,omitnil" name:"ExpiredTime"`
	// 操作系统名称。
	OsName string `json:"OsName,omitnil" name:"OsName"`
	// 实例所属安全组。该参数可以通过调用
	SecurityGroupIds []string `json:"SecurityGroupIds,omitnil" name:"SecurityGroupIds"`
	// 实例状态。取值范围：<br><li>PENDING：表示创建中<br></li><li>LAUNCH_FAILED：表示创建失败<br></li><li>RUNNING：表示运行中<br></li><li>STOPPED：表示关机<br></li><li>STARTING：表示开机中<br></li><li>STOPPING：表示关机中<br></li><li>REBOOTING：表示重启中<br></li><li>SHUTDOWN：表示停止待销毁<br></li><li>TERMINATING：表示销毁中。<br></li>
	InstanceState string `json:"InstanceState,omitnil" name:"InstanceState"`
}

type VirtualPrivateCloud struct {
	VpcId              string   `json:"VpcId,omitnil" name:"VpcId"`
	SubnetId           string   `json:"SubnetId,omitnil" name:"SubnetId"`
	AsVpcGateway       bool     `json:"AsVpcGateway,omitnil" name:"AsVpcGateway"`
	PrivateIpAddresses []string `json:"PrivateIpAddresses,omitnil" name:"PrivateIpAddresses"`
	Ipv6AddressCount   uint64   `json:"Ipv6AddressCount,omitnil" name:"Ipv6AddressCount"`
}

type SystemDisk struct {
	DiskType string `json:"DiskType,omitnil" name:"DiskType"`
	DiskId   string `json:"DiskId,omitnil" name:"DiskId"`
	DiskSize int64  `json:"DiskSize,omitnil" name:"DiskSize"`
}

type InternetAccessible struct {
	// 网络计费类型。取值范围：<br><li>BANDWIDTH_PREPAID：预付费按带宽结算<br><li>TRAFFIC_POSTPAID_BY_HOUR：流量按小时后付费<br><li>BANDWIDTH_POSTPAID_BY_HOUR：带宽按小时后付费<br><li>BANDWIDTH_PACKAGE：带宽包用户<br>默认取值：非带宽包用户默认与子机付费类型保持一致，比如子机付费类型为预付费，网络计费类型默认为预付费；子机付费类型为后付费，网络计费类型默认为后付费。
	InternetChargeType string `json:"InternetChargeType,omitnil" name:"InternetChargeType"`
	// 公网出带宽上限，单位：Mbps。默认值：0Mbps。不同机型带宽上限范围不一致，
	InternetMaxBandwidthOut int64 `json:"InternetMaxBandwidthOut,omitnil" name:"InternetMaxBandwidthOut"`
	// 是否分配公网IP。取值范围：<br><li>TRUE：表示分配公网IP<br><li>FALSE：表示不分配公网IP<br><br>当公网带宽大于0Mbps时，可自由选择开通与否，默认开通公网IP；当公网带宽为0，则不允许分配公网IP。该参数仅在RunInstances接口中作为入参使用。
	PublicIpAssigned bool `json:"PublicIpAssigned,omitnil" name:"PublicIpAssigned"`
	// 带宽包ID。可通过[`DescribeBandwidthPackages`]
	BandwidthPackageId string `json:"BandwidthPackageId,omitnil" name:"BandwidthPackageId"`
}

type DataDisk struct {
	DiskSize           int64  `json:"DiskSize,omitnil" name:"DiskSize"`
	DiskType           string `json:"DiskType,omitnil" name:"DiskType"`
	DiskId             string `json:"DiskId,omitnil" name:"DiskId"`
	DeleteWithInstance bool   `json:"DeleteWithInstance,omitnil" name:"DeleteWithInstance"`
	SnapshotId         string `json:"SnapshotId,omitnil" name:"SnapshotId"`
	Encrypt            bool   `json:"Encrypt,omitnil" name:"Encrypt"`
}

type CbsRequest struct {
	DiskName       string `json:"diskName"`
	Zone           string `json:"zone"`
	DiskChargeType string `json:"diskChargeType"`
	DiskCount      uint64 `json:"diskCount"`
	DiskType       string `json:"diskType"`
	DiskSize       uint64 `json:"diskSize"` // 磁盘大小, 单位GB
	Period         uint64 `json:"period"`   // 续费时长
	DiskRenewFlag  string `json:"diskRenewFlag"`
}

type CbsResponse struct {
	RenewFlag      string `json:"RenewFlag,omitnil" name:"RenewFlag"`
	DiskType       string `json:"DiskType,omitnil" name:"DiskType"`
	DiskState      string `json:"DiskState,omitnil" name:"DiskState"`
	DiskName       string `json:"DiskName,omitnil" name:"DiskName"`
	InstanceId     string `json:"InstanceId,omitnil" name:"InstanceId"`
	DiskId         string `json:"DiskId,omitnil" name:"DiskId"`
	DeadlineTime   string `json:"DeadlineTime,omitnil" name:"DeadlineTime"`     // 云硬盘的到期时间。
	Attached       bool   `json:"Attached,omitnil" name:"Attached"`             // 云盘是否挂载到云主机上
	DiskSize       uint64 `json:"DiskSize,omitnil" name:"DiskSize"`             // 云硬盘大小，单位GB。
	DiskUsage      string `json:"DiskUsage,omitnil" name:"DiskUsage"`           // 云硬盘类型。取值范围：<br><li>SYSTEM_DISK：系统盘<br><li>DATA_DISK：数据盘。
	DiskChargeType string `json:"DiskChargeType,omitnil" name:"DiskChargeType"` // 付费模式。取值范围：<br><li>PREPAID：预付费，即包年包月<br><li>POSTPAID_BY_HOUR：后付费，即按量计费。
	CreateTime     string `json:"CreateTime,omitnil" name:"CreateTime"`         // 云硬盘的创建时间。
}

type InstanceTypeConfig struct {
	Zone           string  `json:"zone,omitnil" name:"zone"`
	InstanceType   string  `json:"instanceType,omitnil" name:"instanceType"`
	InstanceFamily string  `json:"InstanceFamily,omitnil" name:"InstanceFamily"` // 实例机型系列。
	GPU            int64   `json:"GPU,omitnil" name:"GPU"`                       // GPU核数，单位：核。
	CPU            int64   `json:"CPU,omitnil" name:"CPU"`                       // CPU核数，单位：核。
	Memory         int64   `json:"Memory,omitnil" name:"Memory"`                 // 内存容量，单位：`GB`。
	FPGA           int64   `json:"FPGA,omitnil" name:"FPGA"`                     // FPGA核数，单位：核。
	GpuCount       float64 `json:"GpuCount,omitnil" name:"GpuCount"`             // 实例机型映射的物理GPU卡数，单位：卡。vGPU卡型小于1，直通卡型大于等于1。vGPU是通过分片虚拟化技术，将物理GPU卡重新划分，同一块GPU卡经虚拟化分割后可分配至不同的实例使用。直通卡型会将GPU设备直接挂载给实例使用。
}

type HostImage struct {
	ImageId          string `json:"ImageId,omitnil" name:"ImageId"`                   // 镜像ID
	OsName           string `json:"OsName,omitnil" name:"OsName"`                     // 镜像操作系统
	ImageType        string `json:"ImageType,omitnil" name:"ImageType"`               // 镜像类型
	CreatedTime      string `json:"CreatedTime,omitnil" name:"CreatedTime"`           // 镜像创建时间
	ImageName        string `json:"ImageName,omitnil" name:"ImageName"`               // 镜像名称
	ImageSize        int64  `json:"ImageSize,omitnil" name:"ImageSize"`               // 镜像大小
	Architecture     string `json:"Architecture,omitnil" name:"Architecture"`         // 镜像架构
	ImageState       string `json:"ImageState,omitnil" name:"ImageState"`             // 镜像状态:  CREATING-创建中 NORMAL-正常 CREATEFAILED-创建失败 USING-使用中 SYNCING-同步中  IMPORTING-导入中 IMPORTFAILED-导入失败
	Platform         string `json:"Platform,omitnil" name:"Platform"`                 // 镜像来源平台，包括如TencentOS、 CentOS、 Windows、 Ubuntu、 Debian、Fedora等。
	ImageDescription string `json:"ImageDescription,omitnil" name:"ImageDescription"` // 镜像描述
	ImageCreator     string `json:"ImageCreator,omitnil" name:"ImageCreator"`         // 镜像创建者
	ImageSource      string `json:"ImageSource,omitnil" name:"ImageSource"`           // 镜像来源
}

type CvmPriceRequest struct {
	InstanceType  string     `json:"instanceType"`
	SystemDisk    SystemDisk `json:"systemDisk,omitnil" name:"systemDisk"`
	DataDisks     []DataDisk `json:"dataDisks,omitnil" name:"dataDisks"`
	InstanceCount int64      `json:"instanceCount"` // 实例数
	Period        int64      `json:"period"`
	Zone          string     `json:"zone"`
}

type CvmPriceResponse struct {
	InstancePrice  ItemPrice `json:"InstancePrice,omitnil" name:"InstancePrice"`   // 描述了实例价格。
	BandwidthPrice ItemPrice `json:"BandwidthPrice,omitnil" name:"BandwidthPrice"` // 描述了网络价格。
}
